Boru hattı yöntemi bilgisayar mimarisi ve diğer sayısal ürünlerin tasarımında başarımı artırmak için uygulanan bir yöntemdir. Komutları, boru hattı yöntemi ile işleyip daha kısa süre içinde bitmesini sağlar. Asıl amacı saat sıklığını artırarak başarımı artırmaktır. Farklı kaynakları aynı anda, farklı işler tarafından kullanarak çalışır.
Tek çekirdekli işlemcilerde1, bir komut bitince diğer komut çalışmaya başlar. Her saat vuruşunda bir komut girer, bir komut çıkar. Yani buyruk başına düşen çevrim sayısı 1’dir. Boru hattı yöntemi ise çoklu buyrukların örtüşmeli yürütümüdür. Birbirini bağlayan komutlar haricinde bir buyruğun işlemi gerçekleştirilirken diğer komut işleme girebilir. Günümüzde daha hızlı işlemci tasarımında kullanılan önemli bir yöntemdir. Boru hattı işlemcinin komut döngü süresini azaltır bundan dolayı da birim döngü zamanına düşen komut sayısı artar. Boru hattında bütün aşamalardan geçmek gerekir. Tek bir komutun işini değil toplu komutların işlerini hızlandırır. Kısacası toplamda üretilen işi artırır. Olası hızlanma boru hattındaki aşama sayısına bağlı olarak değişir.
Boru hattı hızını etkileyen etkenler:
Birçok modern işlemci saat vuruşlarıyla yürütülür. İşlemciler mantık ve flip-floplardan oluşmaktadır. Saat vuruşu geldiğinde, flip-floplar yeni değerlerini alırlar sonra kodları çözüp yapmaları gereken şeyi yapmaları için belli bir süre gerekir. Bir sonraki saat vuruşu geldiğinde, flip-floplar tekrar kendi değerlerini alırlar ve bu böyle devam eder. Mantık yürütülmesini ufak bölümlere bölüp aralarına flip-floplar koyarsak, veri çıkışımızdaki gecikme azalmış olur. Saat vuruş zamanını azalma nedeni de budur. Boru hattı kullanımında komutlar arası aşama farklılıkları görülmektedir. Yükleme işlemlerinin 5, saklama işlemlerinin 4 dallanma işlemlerinin de 3 aşaması vardır.
Boru hattının dezavantajı, uygulanırken çeşitli sorunlara neden olmasıdır. Boru hattında 3 tip sorun vardır:
Boru hattı uygulamasında aynı kaynak aynı anda birden fazla değişik biçimde kullanılmaya çalışılırsa gerçekleşir. Başarımı sınırlarlar. Sorun bekleyerek çözülebilir.
Dallanma olan yerlerde, koşullar belli olmadan karar verilirse gerçekleşir. Dallanma kararı verilmeden önce yürütüm durdurulur ve karar belli olana kadar beklenir. Bir başka çözüm yolu da; kararı tahmin edip ona göre işlemi devam ettirmek, eğer karar hatalıysa geri dönüp tekrar denemek (Dallanma öngörüsü). Dallanma komutları geldiğinde işlemcinin nereye gideceğini bilmesi gerekir.
Bir önceki işlemde henüz tamamlanmayan bir veri kullanılmak istenirse, Veri Sorunları gerçekleşir.
Boru hattı uygulamasında her işlem birimi aynı aşamada sadece bir kere kullanılır(buyruk başına) ve her işlem birimi tüm buyruklar için aynı aşamada kullanılmalılar. Boru hattında yazmaç türü ve yükleme buyruklarında çakışma ya da yapı sorunu olursa, mesela, iki ayrı buyruk yazmaç öbeğine aynı anda yazmaya çalışıyorsa(sadece bir tane yazmaç yolu vardır) boru hattına boşluk eklenebilir ya da sonucun yazılması bir çevrim geciktirilebilir. Boşluk konması hem karmaşıklık hem de veri açısından iyi bir yol değildir. Onun için genellikle bir çevrim geciktirme yoluna başvurulur. Geciktirilen işlem sırasında bir işlem yapılmaz.
Boru hattı kullanılarak yapılan işlemcilerde beş bağımsız birim vardır:
İki sayının toplama kodu basit olarak ADD A, B, C,
şeklindedir, yani
bellekteki adreslerinden A'nın ve B'nin değerlerini bulup, toplar ve
daha sonra C’nin bellekteki adresine bu sonucu ekler. Boru hattı
kullanılan bir işlemcide, boru hattı kontrolcüsü bu işlemi şöyle ifade
eder:
LOAD A, R1
LOAD B, R2
ADD R1, R2, R3
STORE R3, C
LOAD next instruction
Tablodaki R’ler yazmaçları göstermektedir, işlemcinin içindeki geçici bellekte tutulurlar, böylece çabuk erişim sağlanır. Sonuç basittir toplanıp bulunan sonuç C’nin adresinde tutulur, bu süre boru hattı kullanan ve kullanmayan sistemler için aynıdır.
Boru hattı yönteminin bu toplama komutu örneğindeki avantajı için “kısa yoldan yapılmış” olmasıdır. Burada bellekten veriyi alma görevi döngünündür ve uzun süre kullanımda olmayacağı için az kullanılan bölümde saklanır. Bu durumda boru hattı kontrolcüsü işine yarayacak olan bir sonraki bilgiyi bellekten alıp getirir ve yazmaçlarda tutar. Toplama komutu yerine getirildiği sırada gereken bir sonraki bilgi bellekten alınıp getirilmiş ve hazırda bekletiliyor olması gerekir. Burada programın başarımı büyük ölçüde artar çünkü işlemcinin bileşenleri boş kalmaz.
Bu küçük adımlar boru hattı adımı olarak adlandırılır, yukarıdaki örnekte boru hattı yönteminin 3 ana adımı vardır, bunlar; yükleyici, toplayıcı ve depolayıcıdır.
Günümüzde her mikroişlemci en az iki adımdan oluşan boru hattı kullanmaktadır (Atmel AVR ve PIC mikrokontrolör iki adımlı boru hattı içermektedir).
Bu kavramı daha iyi görselleştirmek için kuramsal 3 aşamalı boru hattı incelenebilir;
<table class="wikitable"> <tr> <th>State
</th> <th>Description
</th> </tr> <tr> <td>Yükle
</td> <td>Bellekten buyruğu okunması
</td> </tr> <tr> <td>Yürüt
</td> <td>Buyruğun Yürütülmesi
</td> </tr> <tr> <td>Sakla
</td> <td>Sonucun belleğe ya da yazmaca saklanması
</td> </tr> </table>Ve bunlarla aşağıdaki komutlar işletilebilir.
LOAD #40,A ; load 40 in A
MOVE A,B ; copy A in B
ADD #20,B ; add 20 to B
STORE B, 0x300 ; store B into memory cell 0x300
Aşağıda nasıl işlendiği gösterilmiştir.
<table class="wikitable"> <caption>1.Çevrim
</caption> <tr> <th>Yükle
</th> <th>Yürüt
</th> <th>Sakla
</th> </tr> <tr> <td>LOAD
</td> <td></td> <td>
</td> </tr> </table>
Aşağıda bellekten komut okunması gösterilmiştir.
<table class="wikitable"> <caption>2.Çevrim
</caption> <tr> <th>Yükle
</th> <th>Yürüt
</th> <th>Sakla
</th> </tr> <tr> <td>MOVE
</td> <td>LOAD
</td> <td></td> </tr> </table>
Bellekten komut okutulması gerçekleşirken, yükleme komutu gerçekleşir.
<table class="wikitable"> <caption>3.Çevrim
</caption> <tr> <th>Yükle
</th> <th>Yürüt
</th> <th>Sakla
</th> </tr> <tr> <td>ADD
</td> <td>MOVE
</td> <td>LOAD
</td> </tr> </table>Depolama kısmında tutulan yükleme komutu (değeri 40) A yazmacında tutulur. Bu sırada hareket komutu işletilir. Hareket komutu, A’nın ve B’nin içerikleri işlemeye geçmeden önce yükleme komutunun işini bitirmesini beklemesi gerekmektedir.
<table class="wikitable"> <caption>4.Çevrim
</caption> <tr> <th>Yükle
</th> <th>Yürüt
</th> <th>Sakla
</th> </tr> <tr> <td>STORE
</td> <td>ADD
</td> <td>MOVE
</td> </tr> </table>Hareket komutunun işlemi bitip sayılar toplandıktan sonra saklama komutu işletilir. Ve bu işlem böyle devam eder. Bazen işletilen komut bir önceki komutun sonucuna bağlıdır. Eğer birden aynı adresi gösteren birden çok komut varsa ve bunların ikisi birden yazma ya da okuma komutuysa, normal program işleyişi sırasıyla yapılmasa risk meydana gelebilir. Böyle bir riskin gerçekleşmemesi için yapılan birçok teknik vardır.
Birçok boru hattı tasarımı 7, 10, 31 bölümden oluşur (Intel Pentium 4 gibi). Xelerator X10q ise binlerce bölümden oluşan boru hattına sahiptir. Eğer işletilen program çok bölümden oluşursa, boru hattı kullanmak soruna yol açabilir, çok bölüm oluşundan dolayı çıkan bu sorunu ise “bölüm bildirici” (ing.: branch predicting) ile hafifletilebilir. Bölüm bildirici problemin kötüye gitmesini kendi engelleyebilir. Güncel uygulamalarda, programlar daha az bölümden oluşan komutlar yazarlar böylece uzun boru hatları program hızını arttırmak için daha idealdir, bu boru hatları komuta göre döngü zamanı verirler. Çok bölümlülük sabitlendiğinde, Ofis programları gibi programlar, boru hattından kazanılan kazancı azaltırlar. Çök bölümlülükten dolayı işlemci bir sonraki bilginin adresinin nerede olduğunu bilemiyor ve işletilen komutunun bitmesini beklemesi gerekiyor. İşletilen komut bittiğinde boru hattı ile bir sonraki bilgi işlemciye iletilir ve işlemci yapması gereken şeyi yapar. Komut, boru hattı kullanılmasından dolayı işlemci yüklemeyi hemen gerçekleştiremez. Koddaki güncelleştirmeler şu andaki işletim yerini etkilemez çünkü işletim için zaten belli bir alan ayrılmıştır (ing.: Prefetch Input Queue). Komut önbellekleri bu durumu daha kötü hala getirirler. Bu sadece “kendi programlanabilen” programlarla ilgilidir, işletim sistemi gibi.
İlk işlemci mikrokontrolörü (MOS Technology 6502) tek bölümlük komut boru hattı uygulamasından oluşurdu.
Orijinal kaynak: boru hattı (bilgisayar). Creative Commons Atıf-BenzerPaylaşım Lisansı ile paylaşılmıştır.
Ne Demek sitesindeki bilgiler kullanıcılar vasıtasıyla veya otomatik oluşturulmuştur. Buradaki bilgilerin doğru olduğu garanti edilmez. Düzeltilmesi gereken bilgi olduğunu düşünüyorsanız bizimle iletişime geçiniz. Her türlü görüş, destek ve önerileriniz için iletisim@nedemek.page